#include "SeqStack.h"
#include <stdlib.h>

/*
	初始化一个栈，并且返回栈的地址
*/
Sqstack *InitStack()
{
	Sqstack *s =(Sqstack *)malloc(sizeof(*s));
	s->top = -1;//-1表示为一个空栈

	return s;
}
/*
	DestroyStack:销毁一个栈
		返回值:NULL
*/
Sqstack *DestroyStack(Sqstack *s)
{
	if(s)
	{
		s->top = -1;
		free(s);

		return NULL;
	}
}
/*
	ClearStack：清空一个栈
*/
void ClearStack(Sqstack *s)
{
	if(s)
	{
		s->top = -1;//清空之后，只能做入栈操作，会把原来的值的覆盖
	}
}
/*
	StackLength:返回栈中元素的个数
*/
int StackLength(Sqstack *s)
{
	if(s)
	{
		return s->top+1;
	}

	return -1;//-1代表异常
}
/*
	GetTop:获取栈顶元素的值，但是不出栈
*/
Datatype GetTop(Sqstack *s)
{
	if(s)
	{
		return s->sq[s->top];
	}
}

/*
	Push：入栈操作 
		往s指向的栈中入栈元素d
	返回值： 
		1 入栈成功 
	    -1 栈满 无法入栈
*/
int Push(Sqstack *s,Datatype d)
{
	if(s)
	{
		if(s->top == STACK_MAX_LENGTH-1)//栈满
		{
			return -1;
		}
		else
		{
			s->sq[++(s->top)] = d;
			return 1;
		}
	}
}
/*
	Pop:出栈 
		把s指向的栈中的栈顶元素进行出栈
		返回值：出栈的元素
*/
Datatype Pop(Sqstack *s)
{
	if(s)
	{
		return s->sq[(s->top)--];//出栈不用清空数组对应位置，后续入栈会新的元素会覆盖掉原来的值
	}
}
/*
	StackIsEmpty：判断一个栈是否为空，如果为空返回1      不为空返回0
*/
int StackIsEmpty(Sqstack *s)
{
	if(s)
	{
		return s->top == -1;
	}

	return -1;//-1代表异常
}

